DIY Sensor de Pulso IR

Já foram realizados 2 testes: Sensor Pulsação - Teste #1 e Sensor Pulsação - Teste #2, ambos usando o QRD1114 (disponível em quantidade no Almoxarifado do curso). Nenhum deles geraram resultados promissores. Partindo então para outra abordagem usando outro sensor/circuito.

Neste caso, um novo teste é realizado usando o MRD500.

Diagrama elétrico

Baseado na solução proposta por Makezine: Infrared Pulse Sensor (acessado em 03/10/2024):

infrared-pulse-sensor-schematic-abstract-620px.png

Noque os Amp.Op.s LM324 atuam como amplificadores e já contêm filtros passa-faixa para tratar o sinal de entrada capturado via led (diodo) foto-detector.

Instructables: DiY Arduino Pulse Sensor (acessado em 03/10/2024), propõe outro circuito:

DIY_Instructables.png

Mas neste caso, o foto-detector nem está "polarizado".

Testes

Foi montada apenas a seção de entrada do circuito proposto por Makezine: Infrared Pulse Sensor, usando o MRD500 no lugar no led detector de IR e um led emissor de luz verde! (lembrar de Sensor de Pulso).

O Data sheet da Motorola (fabricante do MRD500) recomenda a seguinte ligação elétrica para seu foto-detector:

MRD500_recomended_electric_circuit

Note que o mesmo é usado de "modo reverso", isto é, a corrente que circula pelo circuito (modo reverso) é proporcional a intensidade luminosa recebida. É capaz de circular 1,2 Min (segundo informaçoes do Data Sheet). Este diodo suporta tensão reversa máxima de 100 Volts.

Segue pinagem do MRD500 (foto-diodo):

MRD500_pinagem-2

A curva de resposta deste diodo segue abaixo:

MRD500_corrente_reversa_resposta

Nota-se que ele trabalha melhor com tensões reversas 10 Volts. Mas vamos aplicar 5 Volts. Isto resulta numa corrente reversa no intervalo [0,9 43] . Ou seja, se fosse usado o resistor de "carga" sugerido de 50 , teríamos uma tensão de saída oscilando na faixa de [0,000 045 0,00215] Volts. Razão pela qual temos que aumentar consideravelmente o valor deste resistor. Se fosse usado um resistor de 10 K obteremos uma resposta na faixa de [0,009 0,43] Volts. Aumentando este resistor para 1 M obteriámos uma tensão de saída na faixa de [0,9 43] Volts. Então percebemos que é melhor tentar com um resistor série de 100 K ( ), pode-se então esperar uma tensão variando na faixa de 90 mVolts até 4,3 Volts.

100 K (marrom, preto, amarelo, dourado).

Note também que a sensibilidade desde sensor varia conforme o comprimento de onda da luz incidente sobre o mesmo:

MRD500_sensibilidade_luz2

Note que o mesmo é mais sensível para a faixa de visível do vermelho indo para o infra-vermelho:

wavelength_visible_spectre

Mas vamos usar um led verde porque esta cor é melhor absorvida pela hemoglobina do sangue. Um led verde comum emite no comprimento de onda na faixa de [395 530] nm, que infelizmente não coincide com a melhor faixa de sensibilidade deste sensor.

Teste 1

Em função de componentes prontamente disponíveis no momento deste teste, foram usados 2 resistotes em série de 10 K, o que faria a tensão na saída do foto-diodo variar na faixa de 18 mV até 0,86 V. Considerando que a tensão de referência do A/D do Arduíno é de 5 Volts e que o mesmo é de 10-bits, significa valores excursionando na faixa de: 22 até 28.

Valores práticos obtidos

Na prática o valor médio medido ficou na faixa dos 25, o que equivale a uma tensão de 122 mV , com consequentemente uma corrente reversa circulando de 2,44 mA.

Modificando o código já usado em testes anteriores (ver Sensor Pulsação - Teste #1) para realizar uma captura de dados (teste) mas a uma taxa de amostragem aproximada de 5 Hz, ou 200 ms (variável TS = 200), foi obtido o seguinte gráfico:

captura_3_04102024

Obs.: nos últimos 3 à 4 segundos da captura, o sensor está lendo dados com o dedo sendo retirado (a idéia era perceber como os valores variam neste caso).

Continuando...

Aparentemente estes resultados são promissores, mesmo usando resistor de carga do foto-detector com valor de 20 K ao invés dos 100 K previstos inicialmente. Mas o que mais falta realizar para determinar o "BPM"!?

Filtro Passa-Faixa

É esperado medir pulsação na faixa de 30 à 330 BPM o que equivale a um sinal variando entre 0,5 à 5 Hz (apenas).

Se percebe pela captura de dados anterior (próximo do esperado relatado em Sensor de Pulso e Monitor de frequência de pulso) que o nível DC do sinal captado não nos interessa. Se faz necessário detectar uma oscilação sobreposta sobre outra e pode existir ainda uma terceira oscilação "de fundo" (frequência muito baixa) que deve ser descartada pois é causada por movimentação física do sensor/dedo. Como frequências acima de 5 Hz não são esperadas para a informação que queremos obter, então se faz necessário acrescentar um filtro passa-faixa com frequências de corte em 0,5 e 5 Hz.

Supondo que vamos trabalhar com uma taxa de amostragem superior a maior frequência esperada para o nosso sinal, significa trabalhar com Hz ou segundos.

Podemos projetar um filtro Butterworth digital usando o Matlab:

A função [a, b] = butter(ordem, [f_low, f_hight]) pede os seguintes argumentos:

Então um filtro de 2a-ordem Butterworth passa-faixa para este caso, resultaria algo como:

Indicando na ferramenta "Filter Visualization Tool", a 50 Hz, obtemos o seguinte gráfico:

projeto_FPF.png

A função transferência deste filtro ficaria:

O diagrama de ROC (plano-z) deste filtro ficaria como:

projeto_FPF_ROC.png

A eq. de diferenças do flltro, no Matlab (respeitando a forma como variam os índices das matrizes no mesmo) fica:

Ou:

Então:

Note que não existem parâmetros para as amostras atrasadas e , eles são nulos.

A equação acima é a que dever ser implementada num código C++ no Arduíno.

Falta Detector de picos

Falta acrescentar detector de picos (usando derivada sobre o sinal filtrado) e determinação/cálculo dos períodos entre os picos para só então terminar determinando o BPM atual.

Parte 2 |


Fernando Passold, em 03/10/2024